// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std ;


int test(vector<int>nums){
    int n=nums.size();
    sort(nums.begin(),nums.end());
    int minnum=nums[0];int maxnum=nums.back();
    //对数组处理.进行离散化
    if(minnum<0){
        for(auto& x:nums){
            x=x-minnum;//转化为正数
        }
        maxnum=maxnum-minnum;
    }
    cout<<"最小值是: "<<minnum<<endl; 
    cout<<"最大值是: "<<maxnum<<endl; 
    //建立映射关系
    unordered_map<int,bool>mmap(n);
    for(auto x:nums){
        mmap[x]=true; 
    }
    //检查是否存在
    for(int i=1;i<=maxnum;++i){
        //如果没有离散化,第一个就是结果
        if(minnum>=0){
            if(mmap[i]==false)return i;
        }
        else {
            // 进行离散化之后的数据，需要找到第一个映射之前的大于0的数；
            int pre=i+minnum;//minnum是负数
            cout<<"处理之前的数: "<<pre<<endl; 
            if(mmap[i]==false&&pre>0){
                cout<<"该值不存在,且映射之前的值是正数: "<<pre<<endl; 
                return pre; 
            }
        }
    }
    //前面的数组是连续的，那么缺失的就是最大值+1
    int backnum=nums.back()+1;
    if(minnum<0){
        cout<<"前面数组是连续的,最大值是: "<<nums.back()<<endl; 
        backnum+=minnum;
        while(backnum<=0)backnum++;
        return backnum;
    }
    return backnum; 
}


int main(){
    vector<int>nums{2147483647,2147483646,2147483645,3,2,1,-1,0,-2147483648};
    int ret= test(nums);
    cout<<"result: "<<ret<<endl; 
    cout<<2147483647*2<<endl; 
    return 0;
}